<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="chrome://global/skin"?>
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
                 type="text/css"?>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=1271240
-->
<window title="Mozilla Bug 1271240"
        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" onload="run();">

  <!-- test code goes here -->
  <script type="application/javascript">
  <![CDATA[

  function ok(cond, msg) {
    opener.wrappedJSObject.ok(cond, msg);
  }

  function is(actual, expected, msg) {
    opener.wrappedJSObject.is(actual, expected, msg);
  }

  /** Test for Bug 1271240 **/
  function run() {
    // test non-remote, non-prerendered browser
    createBrowser(false, false)
    .then(browser => verifyBrowser(browser, false, false))

    // test non-remote, prerendered browser
    .then(() => createBrowser(true, false))
    .then(browser => verifyBrowser(browser, true, false))
    .then(browser => makePrerenderedBrowserActive(browser))
    .then(browser => verifyBrowser(browser, false, false))

    // test remote, non-prerendered browser
    .then(() => createBrowser(false, true))
    .then(browser => verifyBrowser(browser, false, true))

    // test remote, prerendered browser
    .then(() => createBrowser(true, true))
    .then(browser => verifyBrowser(browser, true, true))
    .then(browser => makePrerenderedBrowserActive(browser))
    .then(browser => verifyBrowser(browser, false, true))

    // finish test
    .then(() => {
      opener.postMessage('finish', '*');
      window.close();
    });
  }

  function createBrowser(prerendered, remote) {
    return new Promise(resolve => {
      var browser = document.createElement('browser');
      browser.setAttribute('type', 'content');
      browser.setAttribute('prerendered', prerendered);
      browser.setAttribute('remote', remote);
      document.documentElement.appendChild(browser);
      browser.loadURI('example.com');
      resolve(browser);
    });
  }

  function verifyBrowser(browser, prerendered, remote) {
    var docShellOrTabParent = remote ?
      browser.frameLoader.tabParent : browser.frameLoader.docShell;
    ok(docShellOrTabParent, 'docShellOrTabParent should not be null');
    is(docShellOrTabParent.isPrerendered, prerendered,
      'isPrerendered should be ' + prerendered);
    return browser;
  }

  function makePrerenderedBrowserActive(browser) {
    browser.makePrerenderedBrowserActive();
    return browser;
  }

  ]]>
  </script>
  <!-- <browser type="content-primary" flex="1" id="content" />
  <browser type="content-primary" flex="1" id="content-remote" remote="true" /> -->
</window>
